/**
 * 上海中赢金融信息服务有限公司
 * Copyright (c) 2016-2026 hmc,Inc.All Rights Reserved.
 */
package com.sys.midware.rdb.sql.parser;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.sys.midware.rdb.sql.SQLType;

/**
 * sql解析工厂
 * 
 * @author mobing@b5m.com
 * @see com.gaoxin.ocean.utils.sql.SqlParserFactory
 * @version V0.0.1-SNAPSHOT, 2015-1-15 上午10:27:50
 * @description
 * 
 */
public class SqlParserFactory {

	/**
	 * 方法的主要入口
	 * @param sql 要解析的sql语句 
	 * @return 返回解析结果 　
	 */
	public static String formatSQL(String sql) {
		sql = sql.trim();
		sql = sql.toLowerCase();
		sql = sql.replaceAll("\\s{1,}", " "); // 将多个空格转为一个
		sql += " ENDOFSQL"; // 加上sql结束标识
		return sql;
	}

	/**
	 * 获取sql类型
	 * @param sql 要解析的sql语句 
	 * @return
	 */
	public static SQLType getSQLType(String sql) {
		sql = formatSQL(sql);
		if (contains(sql, "(insert into)(.+)(select)(.+)(from)(.+)")) {
			return SQLType.INSERT;
		} else if (contains(sql, "(select)(.+)(from)(.+)")) {
			return SQLType.SELECT;
		} else if (contains(sql, "(delete from)(.+)")) {
			return SQLType.DELETE;
		} else if (contains(sql, "(update)(.+)(set)(.+)")) {
			return SQLType.UPDATE;
		} else if (contains(sql, "(insert into)(.+)(values)(.+)")) {
			return SQLType.INSERT;
		} else {
			return SQLType.SELECT;
		}
	}

	/**
	 * 看word是否在lineText中存在，支持正则表达式 
	 * @param sql 要解析的sql语句
	 * @param regExp 正则表达式
	 * @return
	 */
	private static boolean contains(String sql, String regExp) {
		Pattern pattern = Pattern.compile(regExp, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(sql);
		return matcher.find();
	}
	
}